// Podstawowe operacje na plikach
// Musi istnie plik o nazwie testfile
// w biecym katalogu roboczym

#import <Foundation/Foundation.h>

int main (int argc, char *argv[])
{
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    NSFileHandle      *inFile, *outFile;
    NSData            *buffer;

    // Otwarcie pliku testfile do odczytu

    inFile = [NSFileHandle fileHandleForReadingAtPath: @"testfile"];

    if (inFile == nil) {
        NSLog (@"Otwarcie pliku testfile do odczytu nie powiodo si ");
        return 1;
    }

    // Utworzenie pliku docelowego, jeli jest taka potrzeba

    [[NSFileManager defaultManager] createFileAtPath: @"testout"
          contents: nil attributes: nil];

    // Otwarcie pliku outFile   do zapisu

    outFile = [NSFileHandle fileHandleForWritingAtPath: @"testout"];

    if (outFile == nil) {
        NSLog (@"Otwarcie pliku testout do zapisu nie powiodo si ");
        return 2;
    }

    // Obcicie pliku wyjciowego, poniewa moe zawiera dane

    [outFile truncateFileAtOffset: 0];

    // Odczytanie danych z inFile i zapisanie ich w outFile

    buffer = [inFile readDataToEndOfFile];

    [outFile writeData: buffer];

    // Zamknicie obu plikw

    [inFile closeFile];
    [outFile closeFile];

    // Weryfikacja zawartoci pliku

    NSLog(@"%@", [NSString stringWithContentsOfFile: @"testout" encoding:
                  NSUTF8StringEncoding error: nil]);

    [pool drain];
    return 0;
}